
package pe.edu.pucp.DAO;

import pe.edu.pucp.bean.Usuario;
import java.sql.*;
import java.util.ArrayList;
import javax.swing.JOptionPane;



public class MSAccessDAOUsuario implements DAOUsuario{
    @Override
    public ArrayList<Usuario> queryAll() {
          ArrayList <Usuario> userList = new ArrayList<Usuario>();
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            try {
         //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            pstmt = conn.prepareStatement("SELECT * FROM USUARIO");
            rs =  pstmt.executeQuery();
            
            //4. Se evalúan los resultados
            while (rs.next()){
                String id = rs.getString("USER");
                String nombre = rs.getString("NOMBRE");
                String apellidoP = rs.getString("APELLIDOPATERNO");
                String apellidoM = rs.getString("APELLIDOMATERNO");
                String ip = rs.getString("IP");
                String contraseña=rs.getString("CONTRASENA");
                
                Usuario u = new Usuario(id,nombre,apellidoP,apellidoM,ip,contraseña);
                userList.add(u);
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
            return userList;
    }

    @Override
    public int insert(Usuario u) {
        
       int result =0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
             //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            String SQLString = null;
            //Se prepara la sentencia SQL
            SQLString ="INSERT INTO USUARIO(USER,NOMBRE,APELLIDOPATERNO,APELLIDOMATERNO,IP,CONTRASEÑA)"
                        + "VALUES(?,?,?,?,?,?)";
                pstmt = conn.prepareStatement(SQLString);
                pstmt.setString(1, String.valueOf(u.getId()));
                pstmt.setString(2, u.getNombre());
                pstmt.setString(3, u.getApellidoP());
                pstmt.setString(4, u.getApellidoM());
                pstmt.setString(5, String.valueOf(u.getIp()));
                pstmt.setString(6, u.getContrasena());                   
            result =  pstmt.executeUpdate();
            
            //4. Se evalúan los resultados
            if (result == 0){
                throw new Exception();
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
        return result;
    }        

    @Override
    public int update(Usuario u) {
        int result=0;
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        String cadI,cadN,cadAP,cadAM,cadIP,cadC;
        
        cadI=u.getId();
        cadN=u.getNombre();
        cadAP=u.getApellidoP();
        cadAM=u.getApellidoM();
        cadIP=u.getIp();
        cadC=u.getContrasena();
        
        try{
            //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String url="jdbc:odbc:Tramarsa";
            con = DriverManager.getConnection(url);
            
            String SQLString = null;
            SQLString ="UPDATE USUARIO SET "+
                       "USER = '"+cadI+
                       "',NOMBRE = '"+cadN+
                       "',APELLIDOPATERNO = '"+cadAP+
                       "',APELLIDOMATERNO = '"+cadAM+
                       "',IP = '"+cadIP+
                       "',CONTRASEÑA = '"+cadC+"'"+
                       " WHERE USER = '"+cadI+"'";
            
            pstmt = con.prepareStatement(SQLString);
            result =  pstmt.executeUpdate();
            
            //4. Se evalúan los resultados
            if (result == 0){
                throw new Exception();
            }   
        }catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
        return result;
    }

    @Override
    public int delete(String id) {
        
       int result =0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            String SQLString = null;
            //Se prepara la sentencia SQL
            SQLString ="DELETE FROM USUARIO"+" WHERE USER = '"+id+"';";                   
            pstmt = conn.prepareStatement(SQLString);
            result =  pstmt.executeUpdate();
            
            //4. Se evalúan los resultados
            if (result == 0){
                throw new Exception();
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
        return result;
    }

    @Override
    public Usuario queryById(String id) {
       Usuario u= new Usuario();        
        int result =0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
           //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            conn = DriverManager.getConnection(connectionUrl);
            String SQLString = null;
            SQLString ="SELECT * FROM USUARIO WHERE USER = '"+id+"'";
            pstmt = conn.prepareStatement(SQLString);      
            rs =  pstmt.executeQuery();
            
            while (rs.next()){
                String iduser = rs.getString("USER");
                String nombre = rs.getString("NOMBRE");
                String apellidoP = rs.getString("APELLIDOPATERNO");
                String apellidoM = rs.getString("APELLIDOMATERNO");
                String ip = rs.getString("IP");
                String contraseña=rs.getString("CONTRASENA");
                
                u.setId(iduser);
                u.setNombre(nombre);
                u.setApellidoP(apellidoP);
                u.setApellidoM(apellidoM);
                u.setIp(ip);
                u.setContrasena(contraseña);
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
        return u;
    }
    
    @Override
    public int queryIdPass(String id, String passIn) {
        Usuario u= new Usuario();        
        int result =0;
        int validacion=0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            conn = DriverManager.getConnection(connectionUrl);
            String SQLString = null;
            SQLString ="SELECT * FROM USUARIO WHERE USER = '"+id+"' and CONTRASENA='"+passIn+"'";
            pstmt = conn.prepareStatement(SQLString);      
            rs =  pstmt.executeQuery();
            
            while (rs.next()){
                String nombre=rs.getString("NOMBRE");
                String apellidoP=rs.getString("APELLIDOPATERNO");
                String apellidoM=rs.getString("APELLIDOMATERNO");
                u.setApellidoP(apellidoP);     
                u.setNombre(nombre);
               // JOptionPane.showMessageDialog(null,"Bienvenido "+nombre+" "+apellido," ",JOptionPane.CLOSED_OPTION); 
                result=1;
                validacion=1;
            }            
        } catch (Exception ex) {
           pe.edu.pucp.main.Main.log.getPanelLogin1().getPGB().setOrder(0);
            pe.edu.pucp.main.Main.log.getPanelLogin1().getPGB().kill();
            JOptionPane.showMessageDialog(null,"Usuario y/o contrasenha incorrecta"," ",JOptionPane.ERROR_MESSAGE); 
            validacion=1;    
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {
                 if (rs != null)  
                     rs.close();
                 if (validacion==0)
                 {
                     pe.edu.pucp.main.Main.log.getPanelLogin1().getPGB().setOrder(0);
                     pe.edu.pucp.main.Main.log.getPanelLogin1().getPGB().kill();
                     JOptionPane.showMessageDialog(null,"Contrasenha incorrecta"," ",JOptionPane.ERROR_MESSAGE);

                 }   
           
             }
             catch(Exception e){e.printStackTrace();}  
        } 
        return result;
    
    }
    
   
    
    @Override
    public ArrayList<Usuario> queryByName(String cad) {
   
       ArrayList <Usuario> userList = new ArrayList<Usuario>();
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
            try {
            //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            pstmt = conn.prepareStatement("SELECT * FROM USUARIO WHERE NOMBRE LIKE '"+cad+"%'");
            rs =  pstmt.executeQuery();
            
            //4. Se evalúan los resultados
            while (rs.next()){
                String id = rs.getString("USER");
                String nombre = rs.getString("NOMBRE");
                String apellidoP = rs.getString("APELLIDOPATERNO");
                String apellidoM = rs.getString("APELLIDOMATERNO");
                String ip = rs.getString("IP");
                String contraseña=rs.getString("CONTRASEÑA");
                
                Usuario u = new Usuario(id,nombre,apellidoP,apellidoM,ip,contraseña);
                userList.add(u);
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
            return userList;       
    }

    @Override
    public Usuario queryByPass(String nomb, String pass) {
         Usuario u= new Usuario();        
        int result =0;
        int validacion=0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            conn = DriverManager.getConnection(connectionUrl);
            String SQLString = null;
            SQLString ="SELECT * FROM USUARIO WHERE USER = "+nomb+" and CONTRASENA='"+pass+"'";
            pstmt = conn.prepareStatement(SQLString);      
            rs =  pstmt.executeQuery();
            
            while (rs.next()){
                u.setApellidoM(rs.getString("APELLIDOMATERNO"));
                u.setApellidoP(rs.getString("APELLIDOPATERNO"));
                u.setContrasena(rs.getString("CONTRASENA"));
                u.setIp(rs.getString("IP"));
                u.setNombre(rs.getString("NOMBRE"));              
                String nombre=u.getNombre();
                String apellido=u.getApellidoP();
               // JOptionPane.showMessageDialog(null,"Bienvenido "+nombre+" "+apellido," ",JOptionPane.CLOSED_OPTION); 
                result=1;
                validacion=1;
            }            
        } catch (Exception ex) {
            pe.edu.pucp.main.Main.log.getPanelLogin1().getPGB().setOrder(0);
            pe.edu.pucp.main.Main.log.getPanelLogin1().getPGB().kill();
            JOptionPane.showMessageDialog(null,"Usuario y/o contrasenha incorrecta"," ",JOptionPane.ERROR_MESSAGE); 
            validacion=1;    
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {
                 if (rs != null)  
                     rs.close();
                 if (validacion==0)
                 {
                     pe.edu.pucp.main.Main.log.getPanelLogin1().getPGB().setOrder(0);
                     pe.edu.pucp.main.Main.log.getPanelLogin1().getPGB().kill();
                     JOptionPane.showMessageDialog(null,"Contrasenha incorrecta"," ",JOptionPane.ERROR_MESSAGE);

                 }   
           
             }
             catch(Exception e){e.printStackTrace();}  
        } 
        return u;
    }

    @Override
    public ArrayList<Usuario> querybycampos(String nombre,String App,String Apm) {
       
       ArrayList <Usuario> userList = new ArrayList<Usuario>();
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
            try {
            //1. Se registra el driver de la BD
             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2. Se abre la conexión
            String connectionUrl="jdbc:odbc:Tramarsa";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            String SQLString = null;
            SQLString ="SELECT * FROM USUARIO WHERE 1=1"; 
            
            if (nombre!="") SQLString=SQLString + " AND NOMBRE LIKE '%"+nombre+"%'";
            if (App!="") SQLString=SQLString + " AND APELLIDOPATERNO LIKE '%"+App+"%'";
            if (Apm!="") SQLString=SQLString + " AND APELLIDOMATERNO LIKE '%"+Apm+"%'";
            
            pstmt = conn.prepareStatement(SQLString );
            rs =  pstmt.executeQuery();
            
            //4. Se evalúan los resultados
            while (rs.next()){
                String id = rs.getString("USER");
                String name = rs.getString("NOMBRE");
                String apellidoP = rs.getString("APELLIDOPATERNO");
                String apellidoM = rs.getString("APELLIDOMATERNO");
                String ip = rs.getString("IP");
                String contraseña=rs.getString("CONTRASENA");
                
                Usuario u = new Usuario(id,name,apellidoP,apellidoM,ip,contraseña);
                userList.add(u);
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
            return userList;       
    }

   }